package org.wanghong.gift.service.impl;


import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.wanghong.gift.client.LoginUserClient;
import org.wanghong.gift.domain.Employee;
import org.wanghong.gift.domain.LoginUser;
import org.wanghong.gift.domain.Tenant;
import org.wanghong.gift.dto.TenantEnterDto;
import org.wanghong.gift.mapper.EmployeeMapper;
import org.wanghong.gift.mapper.TenantMapper;
import org.wanghong.gift.query.TenantQuery;
import org.wanghong.gift.service.ITenantService;
import org.wanghong.gift.util.AjaxResult;
import org.wanghong.gift.util.PageList;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author wanghong
 * @since 2022-10-10
 */
//@Service
public class TenantServiceImpl1 extends ServiceImpl<TenantMapper, Tenant> implements ITenantService {
    @Autowired
    private  TenantMapper tenantMapper;

    @Autowired
    private LoginUserClient loginUserClient;

    @Autowired
    private EmployeeMapper employeeMapper;

    @Override
    public PageList<Tenant> selectPageList(TenantQuery query) {
        //分页条件
        Page<Tenant> page = new Page<>(query.getPage(),query.getRows());
         //查询后，总数会放到page中，返回当前页数据
        List<Tenant> rows = tenantMapper.selectPageList(page, query);
        return new PageList<>(page.getTotal(),rows);
    }

    @Override
    public AjaxResult settlement(TenantEnterDto tenantEnterDto) {
        //接收dto传过来的数据
        Employee admin = tenantEnterDto.getAdmin();
        Long mealId = tenantEnterDto.getMealId();
        Tenant tenant = tenantEnterDto.getTenant();
        //参数检验
        //1.1 null校验
        //1.2 店铺检验
          //店铺名检验
        if (StringUtils.isEmpty(tenant.getCompanyName()))
            throw new RuntimeException("系统错误！请输入相关信息后再操作");
        //1.3 店铺管理员校验
        if(tenantEnterDto.getAdmin()==null)
            throw new RuntimeException("系统错误！请输入相关信息后再操作");
        //用户名和密码判空
        if(StringUtils.isEmpty(admin.getPassword()) || StringUtils.isEmpty(admin.getPassword()) || StringUtils.isEmpty(admin.getComfirmPassword()))
            throw new RuntimeException("系统错误！请输入相关信息后再操作");
        //在次确认密码
        if (!admin.getPassword().trim().equals(admin.getComfirmPassword().trim()))
            throw new RuntimeException("两次输入的密码不一致");
        //套餐检验
        if(tenantEnterDto.getMealId()==null)
            throw new RuntimeException("系统错误！请输入相关信息后再操作");

        //2 保存数据、 店铺店铺管理员、登陆信息、用户套餐中间表
        //2.1 保存登陆信息及用户套餐中间表并发返回loginId，服务间调用使用（openfegin）
        //方案2：根据接口文档自己来写
        LoginUser loginUser = new LoginUser();
        BeanUtils.copyProperties(admin, loginUser);
        loginUser.setType(0);//设置录的属性，0 为管理员 1为用户
        AjaxResult ajaxResult = loginUserClient.addOrUpdate(loginUser);
        if (!ajaxResult.isSuccess()){
            return AjaxResult.me().setSuccess(false).setMessage(ajaxResult.getMessage());
        }

        //2.2 保存店铺管理员
        admin.setType(5);//员工类型 ， 1平台普通员工 ，2平台客服人员，3平台管理员，4机构员工，5,机构管理员或其他
        //获得loginid
        Long loginId = Long.valueOf(((Integer) ajaxResult.getResultObj()).longValue());
        admin.setLoginId(loginId);//拿到loginId
        employeeMapper.insert(admin);
        //2.3保存店铺信息
        tenant.setState(0);//设置状态0待审核，1 审核通过 ， 2审核失败
        tenant.setAdminId(admin.getId());
        tenantMapper.insert(tenant);
        //2.4保存中间表信息
        Long tenantId = tenant.getId();
        Map<String,Object> map = new HashMap<>();
        map.put("mealId",mealId);
        map.put("tenantId",tenantId);
        map.put("state", 0);//状态,是否过期 0 未支付，1已经购买，2过期
        tenantMapper.insertTenantMeal(map);//把数据放入中间表
        return AjaxResult.me();

    }

}
